home *** CD-ROM | disk | FTP | other *** search
- ;; $Id: cpuinit.inc,v 1.5 2004/12/27 07:04:08 hpa Exp $
- ;; -----------------------------------------------------------------------
- ;;
- ;; Copyright 1994-2002 H. Peter Anvin - All Rights Reserved
- ;;
- ;; This program is free software; you can redistribute it and/or modify
- ;; it under the terms of the GNU General Public License as published by
- ;; the Free Software Foundation, Inc., 53 Temple Place Ste 330,
- ;; Boston MA 02111-1307, USA; either version 2 of the License, or
- ;; (at your option) any later version; incorporated herein by reference.
- ;;
- ;; -----------------------------------------------------------------------
-
- ;;
- ;; cpuinit.inc
- ;;
- ;; CPU-dependent initialization and related checks.
- ;;
-
- check_escapes:
- mov ah,02h ; Check keyboard flags
- int 16h
- mov [KbdFlags],al ; Save for boot prompt check
- test al,04h ; Ctrl->skip 386 check
- jnz skip_checks
-
- ;
- ; Now check that there is sufficient low (DOS) memory
- ;
- ; NOTE: Linux doesn't use all of real_mode_seg, but we use the same
- ; segment for COMBOOT images, which can use all 64K
- ;
- dosram_k equ (real_mode_seg+0x1000) >> 6 ; Minimum DOS memory (K)
- int 12h
- cmp ax,dosram_k
- jae enough_ram
- mov si,err_noram
- call writestr
- jmp kaboom
- enough_ram:
- skip_checks:
-
- ;
- ; Initialize the bcopy32 code in low memory
- ;
- mov si,section..bcopy32.start
- mov di,__bcopy_start
- mov cx,__bcopy_size >> 2
- rep movsd
-
- ;
- ; Check if we're 386 (as opposed to 486+); if so we need to blank out
- ; the WBINVD instruction
- ;
- ; We check for 486 by setting EFLAGS.AC
- ;
- %if DO_WBINVD
- pushfd ; Save the good flags
- pushfd
- pop eax
- mov ebx,eax
- xor eax,(1 << 18) ; AC bit
- push eax
- popfd
- pushfd
- pop eax
- popfd ; Restore the original flags
- xor eax,ebx
- jnz is_486
- ;
- ; 386 - Looks like we better blot out the WBINVD instruction
- ;
- mov byte [try_wbinvd],0c3h ; Near RET
- is_486:
- %endif ; DO_WBINVD
-
-